/**
 * CDN资源配置
 * 用于生产环境的外部依赖加载，减少bundle大小
 */
export interface CdnConfig {
  name: string;
  var: string;
  url: string;
  css?: string;
}

export const cdnConfigs: CdnConfig[] = [
  // Vue核心库可以不使用CDN，因为已经很好地优化了
  // {
  //   name: 'vue',
  //   var: 'Vue',
  //   url: 'https://unpkg.com/vue@3/dist/vue.global.prod.js'
  // },
  // {
  //   name: 'vue-router',
  //   var: 'VueRouter',
  //   url: 'https://unpkg.com/vue-router@4/dist/vue-router.global.prod.js'
  // },
  // {
  //   name: 'pinia',
  //   var: 'Pinia',
  //   url: 'https://unpkg.com/pinia@2/dist/pinia.iife.prod.js'
  // },

  // 可以考虑将大型UI库使用CDN，但需要注意兼容性和样式问题
  // {
  //   name: 'element-plus',
  //   var: 'ElementPlus',
  //   url: 'https://unpkg.com/element-plus@2/dist/index.full.js',
  //   css: 'https://unpkg.com/element-plus@2/dist/index.css'
  // },

  // 对于大型工具库可以考虑CDN
  // {
  //   name: 'dayjs',
  //   var: 'dayjs',
  //   url: 'https://unpkg.com/dayjs@1/dayjs.min.js'
  // },
  // {
  //   name: 'axios',
  //   var: 'axios',
  //   url: 'https://unpkg.com/axios@1/dist/axios.min.js'
  // }
];

/**
 * 获取CDN链接
 */
export const getCdnLinks = (isProd: boolean): string[] => {
  if (!isProd) return [];

  return cdnConfigs
    .filter(config => config.css)
    .map(config => `<link rel="stylesheet" href="${config.css}">`);
};

/**
 * 获取CDN脚本
 */
export const getCdnScripts = (isProd: boolean): string[] => {
  if (!isProd) return [];

  return cdnConfigs
    .map(config => `<script src="${config.url}"></script>`);
};

/**
 * 获取externals配置
 */
export const getExternals = (isProd: boolean): Record<string, string> => {
  if (!isProd) return {};

  return cdnConfigs.reduce((acc, config) => {
    acc[config.name] = config.var;
    return acc;
  }, {} as Record<string, string>);
};